#ifndef __HTTP_BRIDGE_H__
#define __HTTP_BRIDGE_H__

#include <ros/ros.h>
#include "httplib.h"
#include <jsoncpp/json/json.h>
#include <common_modules/file_manager/file_manager.h>

#include <iostream>
#include <string>
#include <vector>
#include <stdexcept>


using namespace std;

class HttpBridge{
    public:
        HttpBridge();
        ~HttpBridge();

        // 获取__cloud_aotbot_url
        inline string getCloudAotbotUrl(){
            return __cloud_aotbot_url;
        }

        // __qiniu_url
        inline string getQiNiuUrl(){
            return __qiniu_url;
        }

        /*************************************
         * 网络状态检测
         *************************************/
        // 读取缓存文件内容
        std::vector<std::string> ReadFile(const std::string &file_path);
        // 网络连接检测 设置超时2s
        bool getNetworkState(std::string cache_file, std::string ip, std::string port);
        // 获取云平台网络状态
        bool getCloudNetworkState();
        // 尝试ping七牛云
        void TryPingQiniu();
        // 尝试ping云平台
        void TryPingCloudAotbot();

        /*************************************
         * HTTP请求
         *************************************/
        // Json::Value -> string
        string Json2String(Json::Value req_data);
        // 消息转换 std::string -> Json::Value
        Json::Value String2JsonValue(string str_data);
        // POST请求 application/json
        Json::Value Post_JsonData(string base_url, string path, Json::Value req_data);
        // POST请求 application/json
        Json::Value Post_JsonData(string base_url, string path, httplib::Headers headers);
        // POST请求 application/json
        Json::Value Post_JsonData(string base_url, string path, 
            httplib::Headers headers, Json::Value req_data);
        // POST请求 application/x-www-form-urlencoded
        Json::Value Post_FormData(string base_url, string path, Json::Value req_data);
        // POST请求 multipart/form-data
        Json::Value Post_MultipartFormData(string base_url, string path, 
            httplib::MultipartFormDataItems form_items);
        // PUT请求
        Json::Value Put_OctetStream(string base_url, string path, httplib::Headers headers, string& content);

    private:
        string __cloud_aotbot_url,__qiniu_url;
        string __cache_database_dir;
};


#endif
